package com.loveprogrammer.lowercode.dna.def;

import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/***
 * 将多个Vd对象组织在一个逻辑单元中，它属于元数据模型的定义部分
 * 这是一个递归树的结构
 * 每一个Dna对象有一个List<Vd> vds属性，用于描述Dna包含的属性列表，
 * businessType用于对Dna对象进行业务分类 businessType与 dnaCode可以唯一的确定一个Dna对象，相当于组合主键
 * dnaName代表结构的名称 dnaDescription用于描述结构 minCount 和 maxCount用于描述该Dna对象作为孩子时，其对应的实例对象个数是多少，单个多个还是零个
 */
@Data
public class Dna {

    private long id;

    private String businessType;

    private String dnaCode;

    private int serNo;

    @JsonIgnore
    private Dna parent;

    private String category;

    private String secondCategory;

    // 数据库映射相关字段
    private String dbMapCode;

    private String dnaName;

    private String dnaDescription;

    private int minCount;

    private int maxCount;

    // 是否属于递归
    private boolean cursive = false;

    // 子集
    private List<Dna> children = new ArrayList<Dna>();

    // Dna包含的属性列表
    private List<Vd> vds = new ArrayList<Vd>();

    private Date LastTime;

    public Dna(String businessType,String dnaCode,String dnaName,String dnaDescription){
        this.businessType = businessType;
        this.dnaCode = dnaCode;
        this.dnaName = dnaName;
        this.dnaDescription = dnaDescription;
    }


    public void addVD(Vd vd) {
        vds.add(vd);
    }

    public List<Dna> addChild(Dna parertyAccountDna) {
        children.add(parertyAccountDna);
        return children;
    }
}
